from collections import Counter
def mex():
mex_val = 0
while (mex_val <= n):
if (mex_val not in s):
return mex_val
mex_val += 1
return mex_val
for _ in range(int(input())):
n = int(input())
arr = [int(item) for item in input().split()]
c = Counter(arr)
s = set(arr)
ans = []
i=0
while(i<n):
m = mex()
z = set()
while (i < n):
if (arr[i] < m):
z.add(arr[i])
c[arr[i]] -= 1
if (c[arr[i]] == 0):
s.remove(arr[i])
if (len(z) == m):
break
i += 1
ans.append(m)
i += 1
print(len(ans))
print(*ans)
#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
using vvi = vector<vi>;
#define pb push_back
int main()
{
int t;
cin>>t;
while (t--){
int n;
cin>>n;
vi a(n + 1);
vvi pos(n + 2);//if mex == n + 1 => pos[n + 1] is empty
for (int i = 1;i<=n;i++){
cin>>a[i];
pos[a[i]].pb(i);//add index i to the set of positions[a[i]]
}
int l = 1;
vi b;//final answer
while (l <= n){
int mex = 0;
int r = l;//[l, l]
for (;mex <= n + 1;mex++){
auto it = lower_bound(pos[mex].begin(),pos[mex].end(),l);
if (it == pos[mex].end())//no occurrence of mex in the range [i, n]
break;
r = max(r, *it);
}
b.pb(mex);
l = r + 1;
}
cout<<(int)b.size()<<endl;
for (auto it:b)cout<<it<<" ";
cout<<endl;
}
return 0;
}
630D - Hexagons | 1690D - Black and White Stripe |
1688D - The Enchanted Forest | 1674C - Infinite Replacement |
712A - Memory and Crow | 1676C - Most Similar Words |
1681A - Game with Cards | 151C - Win or Freeze |
1585A - Life of a Flower | 1662A - Organizing SWERC |
466C - Number of Ways | 1146A - Love "A" |
1618D - Array and Operations | 1255A - Changing Volume |
1710C - XOR Triangle | 415C - Mashmokh and Numbers |
8A - Train and Peter | 591A - Wizards' Duel |
1703G - Good Key Bad Key | 1705A - Mark the Photographer |
1707A - Doremy's IQ | 1706B - Making Towers |
1325B - CopyCopyCopyCopyCopy | 1649C - Weird Sum |
1324B - Yet Another Palindrome Problem | 525A - Vitaliy and Pie |
879A - Borya's Diagnosis | 1672B - I love AAAB |
1673A - Subtle Substring Subtraction | 1345A - Puzzle Pieces |